package view;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Label;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;

import Juego.Jugador;
import MapaStuff.Hectarea;
import Ubicacion.Punto;
import Controller.ControladorPrincipal;
import Excepciones.FueraDeLimites;

public class VentanaPrincipal extends JFrame {

    private static final long serialVersionUID = 7787529771808926374L;

    private PanelDeConstruccion panelDerecho;
    private PanelInformacion panelIzquierdo;
    private JPanel panelInferior;

    public VentanaPrincipal(Jugador modelo, ControladorPrincipal controladorPpal) {    	
    	
    	this.setSize(1400, 1300);
        this.setLocation(0, 0);
        this.setVisible(true);
    	controladorPpal.conocerVista(this);

        setTitle("AlgoCity 2014");
        Container contenedor = getContentPane();
        contenedor.setLayout(new BorderLayout());
               
        panelDerecho = new PanelDeConstruccion(controladorPpal);      
        contenedor.add(panelDerecho, BorderLayout.EAST);
        
        JPanel mapa = new JPanel();
        crearVistaDelMapa(mapa,modelo,controladorPpal);    
        contenedor.add(mapa, BorderLayout.CENTER);
        
        panelInferior = new JPanel(new GridLayout(1,8)); 
        armarPanelDeDatos(panelInferior, modelo);
        contenedor.add(panelInferior, BorderLayout.SOUTH);
        
        panelIzquierdo = new PanelInformacion(modelo,controladorPpal);
        contenedor.add(panelIzquierdo, BorderLayout.WEST);        

    }


	private void armarPanelDeDatos(JPanel panel3, Jugador modelo) {
		panel3.setFont(new Font("helvetica", Font.BOLD, 12));
		
		panel3.add(new Label());
		panel3.add(new Label());
		
		panel3.add(new Label("Poblacion total:"));
		
		JPanel panelPoblacion = new PanelPoblacion(modelo.poblacion());
		panel3.add(panelPoblacion);
		
		panel3.add(new Label());
		
		panel3.add(new Label("Dinero disponible:"));
		JPanel panelDinero = new PanelDinero(modelo);
		panel3.add(panelDinero);
		panel3.add(new Label());
		
		
	}

	private void crearVistaDelMapa(JPanel panel2,Jugador modelo, ControladorPrincipal controladorPpal)  {
		panel2.setLayout(new GridLayout(20, 20));
        
        for (int x = 1; x <= 20; x++) {
            for (int y = 1; y <= 20; y++) {
            	Hectarea hectareaModelo;
				try {
					hectareaModelo = modelo.mapaDelJuego.darHectarea(new Punto (y,x));
					VistaHectarea vistaDeHectarea = new VistaHectarea(new Punto(y, x), hectareaModelo);
					vistaDeHectarea.setBorder(BorderFactory.createLineBorder(Color.black));
	            	vistaDeHectarea.addMouseListener(controladorPpal.getControladorMouse(hectareaModelo, vistaDeHectarea));
					panel2.add(vistaDeHectarea);
				} catch (FueraDeLimites e) {
					// no puede ser fuera de limites
				}
            	
            }
        }
		
	}

	public void mostrarExcepcion(String string) {
		panelIzquierdo.mostrarExepcion(string);
		
	}

	public void mostrarDatosDe(Hectarea hectareaModelo) {
		panelIzquierdo.datosHectarea.cambiarHectarea(hectareaModelo);
		
	}
}

